package cn.cqautotest.downloadfile.download

import java.io.File

/**
 * 下载文件的事件监听
 */
interface DownloadFileListener {

    /**
     * 文件下载请求开始前的回调，可以指定是否继续下载（在当前调用的线程运行）
     *
     * @param file File
     * @param fileIsExists Boolean
     * @return Boolean 返回 true 表示继续下载，false 表示取消当前下载任务
     */
    fun onBeforeBegin(file: File, fileIsExists: Boolean): Boolean

    /**
     * 文件下载进度更新的回调（在主线程中回调）
     *
     * @param currentLength Long 当前已下载的文件长度
     * @param totalLength Long 需要下载的文件长度
     * @param downloadUrl String 需要下载文件的url
     */
    fun onProgressChanged(currentLength: Long, totalLength: Long, downloadUrl: String)

    /**
     * 下载完成回调（在主线程中回调）
     *
     * @param completeSize Long下载到的文件长度
     * @param downloadUrl String 需要下载文件的url
     * @param file File 下载成功的文件对象
     */
    fun onFinished(completeSize: Long, downloadUrl: String, file: File)

    /**
     * 文件下载失败的回调（在主线程中回调）
     *
     * @param file File 下载失败的文件对象
     * @param t Throwable? 下载失败抛出的异常
     */
    fun onFailure(file: File, t: Throwable?)
}